home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 10 / FM Towns Free Software Collection 10.iso / ms_dos / tool / txf / src / txffile.c < prev    next >
C/C++ Source or Header  |  1994-09-17  |  5KB  |  241 lines

  1. /*====================================================================
  2.  *
  3.  * TXF tmporary file module
  4.  *
  5.  *====================================================================
  6.  *                                   copyright(C) 1992-1994 T.Nakatani
  7.  *====================================================================
  8.  */
  9. #include "txf.h"
  10.  
  11. char *get_filename(char *wildcard)
  12. {
  13.     static struct find_t filedata;
  14.     static char wc[76] = "";
  15.     static char fullpath[80];
  16.     char *npos;
  17.     int ret;
  18.  
  19.     if (strcmp(wc, wildcard) != 0) {
  20.         strcpy(wc, wildcard);
  21.         ret = _dos_findfirst(wc, _A_ARCH | _A_NORMAL | _A_RDONLY, &filedata);
  22.     }
  23.     else {
  24.         ret = _dos_findnext(&filedata);
  25.     }
  26.  
  27.     if (ret == 0) {
  28.         strcpy(fullpath, wildcard);
  29.         if ((npos = jstrrchr(fullpath, '\\')) != NULL) {
  30.             strcpy(npos + 1, filedata.name);
  31.         }
  32.         else if ((npos = jstrchr(fullpath, ':')) != NULL) {
  33.             strcpy(npos + 1, filedata.name);
  34.         }
  35.         else {
  36.             strcpy(fullpath, filedata.name);
  37.         }
  38.         if (strstr(fullpath, ".BAK") != NULL) {
  39.             return (get_filename(wildcard));
  40.         }
  41.         return (fullpath);
  42.     }
  43.     else {
  44.         return (NULL);
  45.     }
  46. }
  47.  
  48. void mktfilename()
  49. {
  50.     int i;
  51.  
  52.     if (tfile[0][0] == NUL) {
  53.         for (i = 0x31; i < 0x33; i++) {
  54.             strcpy(tfile[i-0x31], "$txftmp$.)i(");
  55.             tfile[i - 0x31][10] = i;
  56.         }
  57.     }
  58.     else {
  59.         if (strchr(tfile[0],'.') == NULL) {
  60.             if (*(strchr(tfile[0], NUL) - 1) != '\\') strcat(tfile[0], "\\");
  61.             strcat(tfile[0], "$txftmp$.)1(");
  62.             strcpy(tfile[1], tfile[0]);
  63.             tfile[1][strlen(tfile[0]) - 2] = 0x32;
  64.         }
  65.         else {
  66.             tfile[1][strlen(tfile[1])-1] += 1;
  67.         }
  68.     }
  69. #ifdef DEBUG
  70.     if (viewmode > 3) {
  71.         fprintf(stderr, "TMP 1:%s\nTMP 2:%s\n", tfile[0], tfile[1]);
  72.     }
  73. #endif
  74. }
  75.  
  76. void input_to_output()
  77. {
  78.     int i = 0, chr = NUL;
  79.     char *tmpinname, *flast, clinebuf[176];
  80.     struct find_t filedata;
  81.     struct stat sbuf;
  82.  
  83.     if (viewmode > 0) {
  84.         fprintf(stderr, "Copying TMP to output ...");
  85.     }
  86.     if ((viewmode > 0) && (*outputfile == NUL)) {
  87.         fprintf(stderr, "\n");
  88.     }
  89.     tmpinname = ((tmpinfile == -1) ? inputfile : tfile[tmpinfile]);
  90.  
  91.     if (stat(tmpinname, &sbuf) == 0) {
  92.         fsize = sbuf.st_size;
  93.     }
  94.     else {
  95.         fsize = 0;
  96.     }
  97.     input = fopen(tmpinname, "rb");
  98.  
  99.     if (*outputfile != NUL) {
  100.         if (_dos_findfirst(outputfile,
  101.             _A_ARCH | _A_NORMAL | _A_RDONLY, &filedata) == 0) {
  102.             strcpy(bakfile, outputfile);
  103.             flast = strrchr(bakfile, '.');
  104.             if (flast == NULL) {
  105.                 strcat(bakfile, ".bak");
  106.             }
  107.             else {
  108.                 strcpy(flast, ".bak");
  109.             }
  110.             if (removebakfile == 0) {
  111.                 if (_dos_findfirst(bakfile,
  112.                     _A_ARCH | _A_NORMAL | _A_RDONLY, &filedata) == 0) {
  113.                     remove(bakfile);
  114.                 }
  115. #ifdef DEBUG
  116.                 if (viewmode > 2) {
  117.                     fprintf(stderr, "\nInfo:copy %s %s", outputfile, bakfile);
  118.                 }
  119. #endif
  120.                 sprintf(clinebuf, "copy %s %s > NUL", outputfile, bakfile);
  121.                 if (system(clinebuf) != 0) {
  122.                     fprintf(stderr, "\nError:cannot copying to BAK file");
  123.                     exit(1);
  124.                 }
  125.             }
  126.         }
  127.     }
  128.  
  129.     if (*outputfile != NUL) {
  130.         output = fopen(outputfile, "wb");
  131.     }
  132.     else {
  133.         output = stdout;
  134.     }
  135. #ifdef DEBUG
  136.     if (viewmode > 2)
  137.         fprintf(stderr, "\nInfo:read=%s(%d),write=%s(%d),BAK=%s\n"
  138.             ,tmpinname, input, outputfile, output, bakfile);
  139. #endif
  140.     if ((input == NULL) || (output == NULL)) {
  141.         fprintf(stderr, "\nError:cannot open input/output file(3)\n");
  142.         exit(1);
  143.     }
  144.  
  145.     for (; fsize > 0; fsize--) {
  146.         chr = fgetc(input);
  147.         if (chr == TAB) {
  148.             if (tabx) {
  149.                 putspace(((int)(i / tabsize) + 1) * tabsize - i, output);
  150.             }
  151.             else {
  152.                 putc((char)TAB, output);
  153.             }
  154.             i = ((int)(i / tabsize) + 1) * tabsize;
  155.         }
  156.         else {
  157.             i++;
  158.             if (chr == LF) i = 0;
  159.         }
  160.         if ((chr != EOF) && (chr != TAB)) fputc(chr, output);
  161.     }
  162.     if (retflg && (chr != LF)) {
  163.         fputc(CR, output);
  164.         fputc(LF, output);
  165.     }
  166.     fclose(input);
  167.     fclose(output);
  168.     if (*outputfile != NUL) {
  169.         utime(outputfile, ftime);
  170.         if (viewmode > 0)
  171.             fprintf(stderr, " done.\n");
  172.     }
  173. }
  174.  
  175. void tfileopen(int i)
  176. {
  177.     char *tmpinname, *tmpoutname;
  178.     struct stat sbuf;
  179.  
  180.     tmpinname = ((tmpinfile == -1) ? inputfile : tfile[tmpinfile]);
  181.     tmpoutname = tfile[((tmpinfile > 0) ? 0 : 1)];
  182.     if (stat(tmpinname, &sbuf) == 0) {
  183.         fsize = sbuf.st_size;
  184.     }
  185.     else {
  186.         fsize = 0;
  187.     }
  188.  
  189.     if (*tmpinname != NUL) {
  190.         input = fopen(tmpinname, "rb");
  191.     }
  192.     else {
  193.         errexit("Cannot open inputfile.");
  194.     }
  195.     output = fopen(tmpoutname, "wb");
  196. #ifdef DEBUG
  197.     if (viewmode > 2) {
  198.         fprintf(stderr, "Info:read=%s(%d),write=%s(%d)\n",
  199.             tmpinname, input, tmpoutname, output);
  200.     }
  201. #endif
  202.  
  203.     if ((input == NULL) || (output == NULL)) {
  204.         fprintf(stderr, "Error:cannot open TMP file(%d)\n", i);
  205.         exit(1);
  206.     }
  207. }
  208.  
  209. int wcchk()
  210. {
  211.     static int count = 0;
  212.     char *wctmp;
  213.  
  214.     if (*wcfile == NUL) {
  215.         if (count == 0) {
  216.             count++;
  217.             if (*inputfile == NUL) {
  218.                 do {
  219.                     printf("Input Filename >>");
  220.                     wctmp = gets(inputfile);
  221.                 } while (wctmp == NULL);
  222.             }
  223.             gftime(inputfile, ftime);
  224.             return (1);
  225.         }
  226.         else {
  227.             return (0);
  228.         }
  229.     }
  230.     wctmp = get_filename(wcfile);
  231.     if (wctmp == NULL) {
  232.         return (0);
  233.     }
  234.     strcpy(inputfile, wctmp);
  235.     strcpy(outputfile, wctmp);
  236.     fprintf(stderr, "TXF: %s\n", wctmp);
  237.     gftime(wctmp, ftime);
  238.     
  239.     return (1);
  240. }
  241.